import axios from 'axios'

let baseURL = 'http://localhost:8080'
import router from '@/router/index'

let axiosUtil = {
    baseUrl() {
        return baseURL;
    },
    get(config) {
        this.init();
        config.method = 'get'
        //将data赋值给params参数
        config.params = config.data
        axios(config).then(config.success).catch(err => {
            if (config.error) {
                config.error(err);
            } else {
                alert(err);
            }
        })
    },
    //以Json方式提交数据
    postJson(config) {
        this.init();
        config.method = 'post'
        config.headers = {'Content-Type': 'application/json'}
        config.data = JSON.stringify(config.data)
        axios(config).then(config.success).catch(err => {
            if (config.error) {
                config.error(err);
            } else {
                alert(err);
            }
        })
    },
    //以Form表单提交数据
    postForm(config) {
        this.init();
        config.method = 'post';
        config.headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        //将json数据构造成FormData
        let formData = new FormData();
        Object.keys(config.data).forEach(function (key) {
            formData.append(key, config.data[key])
        })
        config.data = formData;
        axios(config).then(config.success).catch(err => {
            if (config.error) {
                config.error(err);
            } else {
                alert(err);
            }
        })
    },
    //公共的初始化代码
    init() {
        axios.defaults.baseURL = baseURL
        //配置请求拦截
        axios.interceptors.request.use(config => {
            //如果已登录，请求时携带token
            let token = sessionStorage.getItem('token');
            config.headers['token'] = token;
            console.info("请求拦截器", config)
            return config;
        }, error => {
            console.log("请求报错")
            console.log(error)
            return Promise.reject(error)
        })
        //配置回应拦截
        axios.interceptors.response.use(res => {
            console.info('返回结果res', res);
            if (res.data.code == 401) {
                console.log('=== 检测到401错误，需要重新登录 ===');
                //登录失效，跳转到登录页面
                const currentPath = router.currentRoute.value.path;
                console.log('当前路径:', currentPath);
                
                if (currentPath.startsWith('/admin')) {
                    // 管理员端，跳转到管理员登录
                    console.log('跳转到管理员登录页');
                    router.push('/adminlogin')
                } else {
                    // 用户端或其他，跳转到用户登录，并保存当前路径
                    console.log('跳转到用户登录页，携带redirect参数:', currentPath);
                    router.push({
                        path: '/clientlogin',
                        query: { redirect: currentPath }
                    })
                }
                return Promise.reject('登录已失效,请重新登录')
            } else if (res.data.code != 200) {
                //请求出错，显示错误信息
                return Promise.reject(res.data.msg)
            }
            //将携带的数据返回
            return res;
        }, error => {
            console.log("回应报错")
            console.log("error", error)
            return Promise.reject(error)
        })
    }
}

export default axiosUtil